define(function(require, exports, module) {
  var $ = require('$');
  var formcc = require('form');
  var dtUtil = require('datatableutil');
  var nav = require("bootstrap_nav");
  require("bootstrap_commonrequire");
  var bootbox = require("bootbox");
  var loader = require("./loader/loader");
  require('select2.css');
  require('select2');
  /* 添加ztree引用 */
  require("zTreeStyle.css");
  require("ztreeCore");
  require("ztreeExcheck");
  

  exports.init = function(divId, data) {
    $(document).ready(function() {
      // 蒙版
      loader.loading("数据加载中，请稍后……");
      
      var isvrecord = {};
      if (data)
        isvrecord = data;
      // 能力类型
      var abilityType = "TalksV2";
      
      
      // 加载自定义模板-条件区域
      var template2 = require("./accountcompanypoolaccrel.tpl");
      var Widget2 = require("widget");
      var Component2 = Widget2.extend({
        template : template2
      });
      new Component2({
        renderTo : divId
      });
      
   // 下拉菜单设置
      // 初始化归属地，绑定所有省份的名称下拉列表
      function getAreaNames(){
        var dataObj = {};
        
        $.ajax({
          url : "/poolnumber/queryAllAreas.do",
          dataType : "json",
          async: false, 
          delay : 250,
          success : function(json) {
            dataObj = json;
          },
          error : function(s) {
            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });
        
        return dataObj;
      };
      var areaNames = getAreaNames();
      $("#numberVestChoose").select2({
        placeholder : "请选择省份名称",
        allowClear : true,
        data : areaNames
      });
      
      // 初始化靓号类型
      var myBeautifulType = [ {id : 'AAAAA', text : "AAAAA"}, 
                              {id : 'AAAA',  text : "AAAA"}, 
                              {id : 'ABCDE', text : "ABCDE"}, 
                              {id : 'ABCD',text : "ABCD"}, 
                              {id : 'AAA',text : "AAA"}, 
                              {id : 'AABB',text : "AABB"}, 
                              {id : 'ABAB',text : "ABAB"}, 
                              {id : 'ABC',text : "ABC"}, 
                              {id : 'AA',text : "AA"},
                              {id : 'NOTHING',text : "无"} ];
      $('#beautiful_typeChoose').select2({
        placeholder : "请选择靓号类型",
        allowClear : true,
        data : myBeautifulType
      });
      
      
      // 获取查询条件，未配置该能力的号码
      function getConditionChoose() {
        //获取查询条件
        var numbers = $('#queryNumberChoose').val();// 手机号码
        var numberVest = $('#numberVestChoose').val();// 号码归属地
        var beautifulType = $('#beautiful_typeChoose').val();// 靓号类型
        var queryStr = "";

        if (numbers != '' && numbers != null) {
          queryStr += ("tpn.phone_number like '%" + numbers + "%';");
        }
        if (numberVest != '' && numberVest != null) {
          queryStr += ("tpn.number_vest_name='" + numberVest + "';");
        }
        if (beautifulType != '' && beautifulType != null) {
          queryStr += ("tpn.beautiful_type='" + beautifulType + "';");
        }
        
        return queryStr;
      };
      
      
      // 加载表单模板和数据
      var Table = require("table");
      // 查询内容显示
      new Table({
        attrs : {
          id : "data_table_Select",
          isHovered : false,
          isStriped : true,
          isBordered : false
        },
        renderTo : "tableSelect"

      });
      
      // 根据能力类型，查询所有已配置能力的号码
      var data_table_select = $('#data_table_Select').dataTable({
        "sDom" : "<'hidden'<'span6'l><'hidden'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
        "bJQueryUI" : false,
        "oLanguage" : {
          "sUrl" : "/business/js/common/table/src/lang/dataTable.cn.txt"
        },
        "sPaginationType" : "bootstrap", // 分页自带两种样式，full_numbers和two_button(默认)
        'bPaginate' : false, // 是否分页
        "bProcessing" : true, // 当datatable获取数据时候是否显示正在处理提示信息。
        "bServerSide" : true, // 指定服务器端分页
        "bDeferRender" : true,
        "bFilter" : true,
        "bSort" : true,
        "bInfo" : true,
//        "sAjaxSource" : "/poolnumber/queryNumbersByAbility.do",
        "sAjaxSource" : "/poolabilityinfo/manageAbiByAccId.do",
        "iDisplayLength" : DATATABLES_CONFIG.iDisplayLength.DEFAULT, // 默认分页的每页记录数
        "fnServerData" : function(sSource, aoData, fnCallback, oSettings) {
          var queryparam = dtUtil.convert_aoData(aoData);
          
          var accountId = isvrecord.id;// 账号id
          queryparam.accountId = accountId;
          queryparam.abilityType = abilityType;// 能力类型

          // 添加自己的额外参数
          oSettings.jqXHR = $.ajax({
            "dataType" : 'json',
            "contentType" : "application/json;charset=UTF-8",
            "type" : "GET",
            "url" : sSource,
            "data" : queryparam, // 将请求数据转换为后台要求的JSON格式
            "success" : function(json) {
              if (json.flag == '000000') {
                dtUtil.successCallback(json, aoData, fnCallback);
                
                // 隐藏该table表单，自拟表单结构
                $("#data_table_Select").hide();
                // 清空table内容
                $("#tableSelectNew").empty();
                $("#tableSelectOther").empty();
                
                // 获取拼接成json串
                var jsondata = json.data;
//                var content = "<td style='width:165px;'>numName<label id='delByAbiId' class='btn icon-remove contrast' title='删除关联关系'></label></td>";
                var content = '<td style="width:200px;">numName<label title="删除关联关系" style="font-size:140%;color:red;cursor:pointer"><center>×</center>' +
                '<input name="myDeleteById" class="tableCheckbox2" style="display:none;" type="checkbox" value="delByAbiId" /></label></td>';
                
                var contentOther = "<td style='width:200px;'><label><input id='checkboxSelectId' type='checkbox' name='checkboxChoose' style='margin-top:-4px;' value='numName' />numName</label></td>";
                var htmls = [];// 设置tableSelectNew的table中的html内容
                var htmlsOther = [];// 设置tableSelectOther的table中的html内容
                var colNum = 4;// 每行放置几列数据
                var totalItemNum = 0;
                totalItemNum = jsondata.totalItemNum;
                var otherNum = 0;// 判断tableSelectOther中的数据个数
                var mount = 1;// 为已配置能力的添加数量
                
                // 拼接table内容
                if(totalItemNum != 0){
                  // 获取data中的items属性
                  var items = jsondata.items;
                  var itemsLen = items.length;
                  var checkboxSelectId = "";// 存放checkbox的id
                  var numName = "";// 存放号码和归属地
                  var isExist = "";// 是否能否选择
                  var confObj = new Array();
                  var unConfObj = new Array();
                  
                  // 将已配置本能力的号码，与本账号下配置了其他能力但未配置本能力的号码，进行分类
                  for(var i=1;i<=itemsLen;i++){
                    var bean = items[i-1];
                    isExist = bean.comment_info;
                    
                    if(isExist == "conf"){
                      confObj.push(bean);
                    }else{
                      unConfObj.push(bean);
                    }
                  }
                  
                  // 设置tableSelectNew的table中的html内容
                  for(var i=1;i<=confObj.length;i++){
                    var bean = confObj[i-1];
                    numName = bean.phone_number + "(" + bean.number_vest_name + ")";
                    checkboxSelectId = bean.id;// pool_ability表的id
                    isExist = bean.comment_info;
                    
                    if(i%colNum==1){
                      htmls.push("<tr>" + content.replace(/numName/g, numName).replace(/delByAbiId/g, checkboxSelectId));
                      if(i==itemsLen){
                        htmls.push("</tr>");
                      }
                    }else if(i%colNum==0){//这里控制
                      htmls.push(content.replace(/numName/g, numName).replace(/delByAbiId/g, checkboxSelectId) + "</tr>");
                    }else{
                      htmls.push(content.replace(/numName/g, numName).replace(/delByAbiId/g, checkboxSelectId));
                      if(i==itemsLen){
                        htmls.push("</tr>");
                      }
                    }
                    
                  }
                   
                  // 设置tableSelectOther的table中的html内容
                  for(var i=1;i<=unConfObj.length;i++){
                    var bean = unConfObj[i-1];
                    numName = bean.phone_number + "(" + bean.number_vest_name + ")";
                    checkboxSelectId = bean.id;// pool_ability表的id
                    isExist = bean.comment_info;
                    
                    if(i%colNum==1){
                      htmlsOther.push("<tr>" + contentOther.replace(/numName/g, numName).replace(/checkboxSelectId/g, checkboxSelectId));
                      otherNum++;
                      if(i==itemsLen){
                        htmlsOther.push("</tr>");
                      }
                    }else if(i%colNum==0){//这里控制
                      htmlsOther.push(contentOther.replace(/numName/g, numName).replace(/checkboxSelectId/g, checkboxSelectId) + "</tr>");
                      otherNum++;
                    }else{
                      htmlsOther.push(contentOther.replace(/numName/g, numName).replace(/checkboxSelectId/g, checkboxSelectId));
                      otherNum++;
                      if(i==itemsLen){
                        htmlsOther.push("</tr>");
                      }
                    }
                    
                  }
                  
                  if(otherNum == 0){
                    htmlsOther.push("<div>本账号下不存在配置了其他能力但未配置本能力的号码</div>");
                  }
                  
                }
                // 不存在已配置该能力的号码
                else{
                  htmls.push("<div>该能力并未配置号码</div>");
                  htmlsOther.push("<div>本账号下不存在配置了其他能力但未配置本能力的号码</div>");
                }
                
                totalItemNum = totalItemNum - otherNum;
                $("#data_table_Select_info").text("共 "+totalItemNum+" 条记录");
                
                // 将数组转换成字符串，用空格分开
                var myhtml = htmls.join('');
                var myhtmlOther = htmlsOther.join('');
                
                // 显示table内容
                $("#tableSelectNew").append(myhtml);
                $("#tableSelectOther").append(myhtmlOther);
                
                
                
                $("[name='myDeleteById']:checkbox").on('click', function(){
                  if(window.confirm('您确定要执行此操作吗？')){
                    if($(this).attr("checked")=="checked"){
                      
                      // 获取Checkbox中的Value值，包含numbersId和numbers
                      myId=$(this).val();
                      var formdata2= {
                          accountId : isvrecord.id,
                          abilityId : myId
                      };
                      
                      $.ajax({    // 根据组织账号和号码删除能力号码关系表中的一条记录
                        url :"/poolaccountrel/deleteByAccAbiId.do",
                        dataType : "json",
                        data : "data=" + JSON.stringify(formdata2),
                        type : "POST",
                        async : false,
                        success : function(json) {
                          if(json.flag == '000000'){
                            // 重新加载该界面的内容
                            data_table_select.fnFilter("");
                            data_table_choose.fnFilter("");
                            // 首次打开页面
                            dataConfInit(abilityType);
                            
                            return true;
                          } else {
                            oauth2Relogin();
                          }
                        },
                        error : function() {
                          loader.noloading();
                          bootbox.alertTimeout("网络请求失败，请重试！");
                        }
                      });
                      return true;
                    }else{
                      return false;
                    }
                  }else{
                    return false;
                  }
                });
                
                
                // 隐藏蒙版
                loader.noloading();
              } else {
                oauth2Relogin();
              }
            }
          });

        },
        "aoColumns" : [ {
          "sTitle" : "手机号码",
          "bSortable" : false,
          "mData" : "phone_number",
          "bVisible" : true
        } ],
        "fnDrawCallback" : function(oSettings) {
          // 表格绘制完成后，去除width属性，使表格可缩放
          $('#' + oSettings.sTableId).css("width", "");
        }
      });
      
     
      // 加载表单模板和数据
      var Table2 = require("table");
      // 查询内容显示
      new Table2({
        attrs : {
          id : "data_table_Choose",
          isHovered : false,
          isStriped : true,
          isBordered : false
        },
        renderTo : "tableChoose"

      });
      
      // 根据能力类型，查询所有未配置能力的号码
      var data_table_choose = $('#data_table_Choose').dataTable({
        "sDom" : "<'hidden'<'span6'l><'hidden'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
        "bJQueryUI" : false,
        "oLanguage" : {
          "sUrl" : "/business/js/common/table/src/lang/dataTable.cn.txt"
        },
        "sPaginationType" : "bootstrap", // 分页自带两种样式，full_numbers和two_button(默认)
        'bPaginate' : true, // 是否分页
        "bProcessing" : true, // 当datatable获取数据时候是否显示正在处理提示信息。
        "bServerSide" : true, // 指定服务器端分页
        "bDeferRender" : true,
        "bFilter" : true,
        "bSort" : true,
        "bInfo" : true,
        "sAjaxSource" : "/poolnumber/queryUnConfNumByAbility.do",
        "iDisplayLength" : 32, // 默认分页的每页记录数
        "fnServerData" : function(sSource, aoData, fnCallback, oSettings) {
          var queryparam = dtUtil.convert_aoData(aoData);
          
          //拼接where查询条件
          var cond = getConditionChoose();
          if (cond != '' && cond != null) {
            queryparam.q += cond;
          }
          if (abilityType != '' && abilityType != null) {
            queryparam.abilityType = abilityType;// 能力类型
          }else{
            queryparam.abilityType = "TalksV2";
          }
          var accountId = isvrecord.id;// 账号id
          queryparam.accountId = accountId;

          // 添加自己的额外参数
          oSettings.jqXHR = $.ajax({
            "dataType" : 'json',
            "contentType" : "application/json;charset=UTF-8",
            "type" : "GET",
            "url" : sSource,
            "data" : queryparam, // 将请求数据转换为后台要求的JSON格式
            "success" : function(json) {
              if (json.flag == '000000') {
                dtUtil.successCallback(json, aoData, fnCallback);
                
                // 隐藏该table表单，自拟表单结构
                $("#data_table_Choose").hide();
                // 清空table内容
                $("#tableChooseNew").empty();
                
                // 获取拼接成json串
                var jsondata = json.data;
                var content = "<td style='width:200px;'><label><input id='checkboxId' type='checkbox' name='checkboxChoose' style='margin-top:-4px;' value='numName' />numName</label></td>";
                var htmls = [];// 设置html内容
                var colNum = 4;// 每行放置几列数据
                
                // 拼接table内容
                if(jsondata.totalItemNum != 0){
                  // 获取data中的items属性
                  var items = jsondata.items;
                  var itemsLen = items.length;
                  var numName = "";// 存放号码和归属地
                  var checkboxId = "";// 存放checkbox的id
                  
                  for(var i=1;i<=itemsLen;i++){
                    var bean = items[i-1];
                    numName = bean.phone_number + "(" + bean.number_vest_name + ")";
                    checkboxId = bean.id;
                    
                    if(i%colNum==1){
                      htmls.push("<tr>" + content.replace(/numName/g, numName).replace(/checkboxId/g, checkboxId));
                      if(i==itemsLen){
                        htmls.push("</tr>");
                      }
                    }else if(i%colNum==0){//这里控制
                      htmls.push(content.replace(/numName/g, numName).replace(/checkboxId/g, checkboxId) + "</tr>");
                    }else{
                      htmls.push(content.replace(/numName/g, numName).replace(/checkboxId/g, checkboxId));
                      if(i==itemsLen){
                        htmls.push("</tr>");
                      }
                    }
                  }
                  
                }
                // 不存在已配置该能力的号码
                else{
                  htmls.push("<div>并不存在未配置号码</div>");
                }
                
                // 将数组转换成字符串，用空格分开
                var myhtml = htmls.join('');
                // 显示table内容
                $("#tableChooseNew").append(myhtml);
                
                
                // 隐藏蒙版
                loader.noloading();
              } else {
                oauth2Relogin();
              }
            }
          });

        },
        "aoColumns" : [ {
          "sTitle" : "手机号码",
          "bSortable" : false,
          "mData" : "phone_number",
          "bVisible" : true
        } ],
        "fnDrawCallback" : function(oSettings) {
          // 表格绘制完成后，去除width属性，使表格可缩放
          $('#' + oSettings.sTableId).css("width", "");
        }
      });
      
      
      // 查看自己刚刚选择好的号码
      function selectedNumbers(){
        var arrSelect = [];
        // 获取选中的checkbox的value值
        var arrChk=$("input[type='checkbox'][name='checkboxChoose']:checked");
        $(arrChk).each(function(){
          arrSelect.push(this.value);                       
        });
        return arrSelect;
      };
      
      
      // 查看自己刚刚选择好的号码，已选号码按钮事件
      $('#numsSelected').click(function() {
        // 获取自己刚刚选择好的号码
        var getSelectedNumbers = selectedNumbers();
        
        var content = "<td style='width:160px;'>numName</td>";
        var htmls = [];// 设置html内容
        var colNum = 5;// 每行放置几列数据
        items = getSelectedNumbers;
        var itemsLen = getSelectedNumbers.length;
        
        // 拼接table内容
        if(itemsLen != 0){
          for(var i=1;i<=itemsLen;i++){
            var numName = "";// 存放号码和归属地
            numName = items[i-1];
            
            if(i%colNum==1){
              htmls.push("<tr>" + content.replace(/numName/g, numName));
              if(i==itemsLen){
                htmls.push("</tr>");
              }
            }else if(i%colNum==0){//这里控制
              htmls.push(content.replace(/numName/g, numName) + "</tr>");
            }else{
              htmls.push(content.replace(/numName/g, numName));
              if(i==itemsLen){
                htmls.push("</tr>");
              }
            }
          }
          
        }
        // 不存在已配置该能力的号码
        else{
          htmls.push("<div>请选择需要配置的号码</div>");
        }
        
        // 清空table内容
        $("#tableChooseNew").empty();
        $('#data_table_Choose').hide();
        $("#tableChoose").hide();
        
        // 将数组转换成字符串，用空格分开
        var myhtml = htmls.join('');
        // 显示table内容
        $("#tableChooseNew").append(myhtml);
        
        return false;
      });
      
      
      // 未配置该能力的号码，查询按钮
      $('#queryChooseBtn').click(function() {
        // 蒙版
        loader.loading("数据加载中，请稍后……");
        data_table_choose.fnFilter("");
        return false;
      });
      
      // 未配置该能力的号码，重置按钮
      $('#restChooseBtn').click(function() {
        // 蒙版
        loader.loading("数据加载中，请稍后……");
        $('#queryNumberChoose').val("");
        $('#beautiful_typeChoose').select2("val", "");
        $('#numberVestChoose').select2("val", "");
        
        data_table_choose.fnFilter("");
        return false;
      });
      
      
      // 保存按钮操作
      var saveAction = function() {
//        loader.loading("正在配置账号与号码能力，请稍等……");
        
        var arrSelect = [];
        // 获取选中的checkbox的value值
        var arrChk=$("input[type='checkbox'][name='checkboxChoose']:checked");
        $(arrChk).each(function(){
          var this_id = $(this).attr("id");
          var this_value = this.value;
          var getIndex = this_value.indexOf("(");
          this_value_vest = this_value.substring(getIndex+1,this_value.length-1);
          
          var formdata = {
              pool_num_id : this_id,
              account_id : isvrecord.id,
              account_identifier : isvrecord.identifier,
              number_vest : this_value_vest,// 现在号码归属地中填写的是名称
              email_notice : "yes",
              switch_num : "yes"
          };
          arrSelect.push(formdata);
          
        });
        
        // 提交请求，插入该号码
        $.ajax({
          url : "/poolaccountrel/doInsert.do",
          dataType : "json",
          data : "data=" + JSON.stringify(arrSelect),
          type : "POST",
          success : function(json) {
            if(json.flag == '000000'){
//              nav.toPageView("admin/accountinfo.html");
              // 重新加载该界面的内容
              data_table_select.fnFilter("");
              data_table_choose.fnFilter("");
              // 首次打开页面
              dataConfInit(abilityType);
              loader.noloading();                   
            } else {
              oauth2Relogin();                    
            }
          },
          error : function(s) {
            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });

      };
        
      // 保存按钮
      $('#submitbtn').click(function() {   
        saveAction();
        
        return false;
      });
      
      // 取消按钮操作
      $('#btn_cancel').on('click', function() {
        $('#accountinfo_data_table_edit').hide();
        $('#accountinfo_data_table2').hide();
        $('#accountinfo_data_table').show();
        $("#accountForm").show();
        $("#queryAreaId").show();
        
        return false;
      });
      
      
      
   // 左侧，能力显示
      // ztree使用
      var setting = {
        view: {
          dblClickExpand: false,
          showLine: true,
          selectedMulti: false
        },
        data: {
          /*key: {
            title:"t"
          },*/
          simpleData: {
            enable: true
          }
        },
        callback: {
          beforeClick: beforeClick,
          onClick: onClick
        }
      };
      
      // 获取ztree中zNodes的数据
      var getZNodes = function(){
        // 返回ztree中zNodes的数据
        var zNodes = [];
        $.ajax ({
          url : "/rule/queryAllRule.do",
          dataType : 'json',
          async: false, 
          delay : 250,
          success : function(data) {
            // 获取能力类型相关数据
            zNodes = data.data.items;
          },
          cache : true
        });
        
        return zNodes;
      }
      var zNodes = getZNodes();

      function beforeClick(treeId, treeNode, clickFlag) {
        return (treeNode.click != false);
      }
      function onClick(event, treeId, treeNode, clickFlag) {
        // 点击父节点不进行以下操作
        if(treeNode.pId != null){
          // 蒙版
          loader.loading("数据加载中，请稍后……");
          abilityType = treeNode.remarks;// 获取能力类型
          
          // 刷新表单
          data_table_select.fnFilter("");
          data_table_choose.fnFilter("");
          
          loader.noloading();
        }
      }
      
      // 左侧，能力显示
      $.fn.zTree.init($("#tree"), setting, zNodes);
      
      
      // 根据账号id查询所有账号与号码能力关系信息，并按照能力类型分别统计个数
      function getTotalRelByAccoutId(accountId){
        var dataObj = {};
        
        $.ajax({
          url : "/poolaccountrel/getTotalRelByAccoutId.do?accountId="+accountId,
          dataType : "json",
          async: false, 
          delay : 250,
          success : function(json) {
            if(json.flag == '000000'){
              dataObj = json.data;
            } else {
              oauth2Relogin();                    
            }
          },
          error : function(s) {
            loader.noloading();
            bootbox.alertTimeout("网络请求失败，请重试！");
          }
        });
        
        return dataObj;
      };
      
      // 首次打开页面
      function dataConfInit(ability_type_init){
        // 获取ztree对象
        var treeObj = $.fn.zTree.getZTreeObj("tree");
        // 获取节点中的相关数据
        var node_init = treeObj.getNodeByParam("remarks", ability_type_init);
        // 将ztree中的该节点选中
        treeObj.selectNode(node_init);
        // 获取html元素id
        var this_content = $("#"+node_init.tId+"_span");
        // 若存在则删除b元素内容
        this_content.parent().next("b").remove();
        
        abilityType = ability_type_init;// 获取能力类型
        
        // 根据账号id查询所有账号与号码能力关系信息，并按照能力类型分别统计个数
        var totalRel = getTotalRelByAccoutId(isvrecord.id);
        var items = totalRel.items;
        var itemsLen = items.length;
        
        if(itemsLen>0){
          // 对于已配置的能力，设置已经配置的个数
          for(var i=0;i<itemsLen;i++){
            var bean = items[i];
            // 获取节点中的相关数据
            var node = treeObj.getNodeByParam("remarks", bean.ability_type);
            // 获取html元素id
            var content = $("#"+node.tId+"_span");
            // 若存在则删除b元素内容
            content.parent().next("b").remove();
            
            // 为已配置能力的添加对勾
            content.parent().parent().append("<b style='font-size:100%;font-weight:bold;color:green;margin-left:20px;'>"+bean.id+"</b>");
          }
        }
      }
      // 首次打开页面
      dataConfInit(abilityType);
      
      
    });
  };
});
